@file:Suppress("unused", "MemberVisibilityCanBePrivate")

package com.virtualightning.mvvm.tools.shapes

import android.graphics.Canvas
import android.graphics.Paint

/**
 *  Anchor : Create by CimZzz
 *  Time : 2021/12/25 19:34
 *  线段
 */
class VLLine(
): BaseShape() {
	var startPoint: VLPoint = VLPoint()
	var endPoint: VLPoint = VLPoint()

	override fun toString(): String {
		return "VLLine(start: $startPoint, end: $endPoint)"
	}

	///////////////////////////////////////////////////////////////////////////
	// 代码分割线 on 2021/12/25 10:55 下午 by CimZzz
	// 以下内容为:
	// 父类实现方法
	///////////////////////////////////////////////////////////////////////////
	/**
	 * X 轴偏移
	 * @param dx Float X 轴偏移量
	 */
	override fun onOffsetX(dx: Float) {
		startPoint.offsetX(dx)
		endPoint.offsetX(dx)
	}

	/**
	 * Y 轴偏移
	 * @param dy Float Y 轴偏移量
	 */
	override fun onOffsetY(dy: Float) {
		startPoint.offsetY(dy)
		endPoint.offsetY(dy)
	}

	/**
	 * 移动 X 轴至指定位置
	 * @param x Float X 坐标
	 */
	override fun onMoveX(x: Float) {
		startPoint.moveX(x)
		endPoint.moveX(x)
	}

	/**
	 * 移动 Y 轴至指定位置
	 * @param y Float Y 坐标
	 */
	override fun onMoveY(y: Float) {
		startPoint.moveY(y)
		endPoint.moveY(y)
	}

	/**
	 * 绘制图形
	 * @param canvas Canvas 画布
	 * @param paint Paint 画笔
	 */
	override fun onDraw(canvas: Canvas, paint: Paint) {
		canvas.drawLine(startPoint.x, startPoint.y, endPoint.x, endPoint.y, paint)
	}

	///////////////////////////////////////////////////////////////////////////
	// 代码分割线 on 2021/12/25 7:36 下午 by CimZzz
	// 以下内容为:
	// 位置相关方法
	///////////////////////////////////////////////////////////////////////////

	/**
	 * 设置起始点
	 * @param x Float x 坐标
	 * @param y Float y 坐标
	 */
	fun setStart(x: Float, y: Float) {
		startPoint.set(x, y)
	}

	/**
	 * 设置终止点
	 * @param x Float x 坐标
	 * @param y Float y 坐标
	 */
	fun setEnd(x: Float, y: Float) {
		endPoint.set(x, y)
	}

	/**
	 * 设置线段
	 * @param startX Float 起始点 X 坐标
	 * @param startY Float 起始点 Y 坐标
	 * @param endX Float 终止点 X 坐标
	 * @param endY Float 终止点 Y 坐标
	 */
	fun set(startX: Float, startY: Float, endX: Float, endY: Float) {
		setStart(startX, startY)
		setEnd(endX, endY)
	}

	/**
	 * 设置线段
	 * @param startX Float 起始点 X 坐标
	 * @param startY Float 起始点 Y 坐标
	 * @param endPoint VLPoint 终止点
	 */
	fun set(startX: Float, startY: Float, endPoint: VLPoint) {
		startPoint.set(startX, startY)
		this.endPoint.set(endPoint)
	}

	/**
	 * 设置线段
	 * @param startPoint VLPoint 起始点
	 * @param endX Float 终止点 X 坐标
	 * @param endY Float 终止点 Y 坐标
	 */
	fun set(startPoint: VLPoint, endX: Float, endY: Float) {
		this.startPoint.set(startPoint)
		endPoint.set(endX, endY)
	}

	///////////////////////////////////////////////////////////////////////////
	// 代码分割线 on 2021/12/25 7:41 下午 by CimZzz
	// 以下内容为:
	// 访问线段属性方法
	///////////////////////////////////////////////////////////////////////////

	/**
	 * 获取线段长度
	 * @return Float 线段长度
	 */
	fun getLineLength(): Float {
		return startPoint.distance(endPoint)
	}

}